package com.oasys.dao;

import com.oasys.entity.dto.ApplyDto;
import com.oasys.entity.po.ApplyPo;
import com.oasys.entity.po.ApplyTypePo;
import com.oasys.entity.po.SubmitPo;
import com.oasys.entity.po.SubmitTypePo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Description: TODO
 * @Author: mis_wu
 * @Date: 2022/5/17
 **/
@Mapper
public interface ApprovalMapper {

    /**
     * 离职记录查询
     * @param userId
     * @return
     */
    List<ApplyDto> findResignApplyList(@Param("id") Long userId);

    /**
     * 获取申请类型
     * @param typeId
     * @return
     */
    String findApplyType(@Param("id") Long typeId);

    /**
     * 获取状态
     * @param stateId
     * @return
     */
    String findApplyState(@Param("id") Long stateId);

    /**
     * 请假数据查询
     * @param userId
     * @return
     */
    List<ApplyDto> findLeaveApplyList(@Param("id") Long userId);

    /**
     * 获取所有申请类型
     * 离职 -1 排除
     * @return
     */
    List<ApplyTypePo> findApplyTypeAll();

    /**
     * 请假审批
     * @param applyPo
     * @return
     */
    Boolean saveLeaveApply(@Param("po") ApplyPo applyPo);

    /**
     * 获取报销类型
     * @return
     */
    List<SubmitTypePo> getSubmitType(@Param("id") Long typeId);

    /**
     * 保存申请
     * @param submitVo
     * @return
     */
    Boolean saveExpenseApply(@Param("po") SubmitPo submitVo);

    /**
     * get
     * @param userId
     * @return
     */
    List<SubmitPo> findExpenseApplyList(@Param("userId") Long userId);

    /**
     * 管理员获取所有离职数据
     * @param userId
     * @return
     */
    List<ApplyDto> findAllApplyData(@Param("userId") Long userId);

    /**
     * 获取所有报销数据
     * @param userId
     * @return
     */
    List<SubmitPo> findAllSubmitData(@Param("userId") Long userId);

    /**
     * 获取申请信息(请假、离职)
     * @param applyId
     * @return
     */
    Long getApplyInfo(@Param("applyId") Long applyId);

    /**
     * 修改审批状态(请假、离职)
     * @param applyId
     * @param stateId
     * @param rejectMemo
     * @return
     */
    Boolean updateApplyState(@Param("applyId") Long applyId,@Param("stateId") Long stateId,@Param("memo") String rejectMemo);

    /**
     * 修改 报销 状态
     * @param applyId
     * @return
     */
    Boolean updateSubmitState(@Param("applyId") Long applyId,@Param("stateId") Long stateId);

}
